using RAG.Application.Dtos.User;
using RAG.Domain.Entities.App;

namespace RAG.Application.Services.Interfaces;

public interface IUserService
{
    // 获取所有用户
    Task<IEnumerable<UserDto>> GetAllAsync();
    
    // 根据用户名获取用户
    Task<UserDto?> GetByUsernameAsync(string username);
    
    // 根据ID获取用户详情
    Task<UserDto?> GetUserByIdAsync(Guid id);
    
    // 创建用户
    Task<UserDto> CreateUserAsync(UserDto userDto);
    
    // 更新用户
    Task<UserDto> UpdateUserAsync(Guid id, UserDto userDto);
    
    // 删除用户
    Task<bool> DeleteUserAsync(Guid id);
    
    // 更新用户状态
    Task<bool> UpdateUserStatusAsync(Guid id, string newStatus);
    
    // 测试领域事件
    Task<bool> TestDomainEventsAsync();
    
    // 获取用户角色
    Task<IEnumerable<string>> GetUserRolesAsync(Guid userId);
    
    // 为用户分配角色
    Task<bool> AssignRolesToUserAsync(Guid userId, IEnumerable<Guid> roleIds);
    
    // 移除用户的角色
    Task<bool> RemoveRolesFromUserAsync(Guid userId, IEnumerable<Guid> roleIds);
    
    // 更新用户的角色（替换所有角色）
    Task<bool> UpdateUserRolesAsync(Guid userId, IEnumerable<Guid> roleIds);
    
    // 获取用户的所有权限
    Task<IEnumerable<string>> GetUserPermissionsAsync(Guid userId);
}